home *** CD-ROM | disk | FTP | other *** search
/ Amoszine 2 / Amoszine 2.adf / POWER_PACKED_SOURCE / Swap_scroll.AMOS.pp / Swap_scroll.AMOS / Swap_scroll.amosSourceCode < prev   
Encoding:
AMOS Source Code  |  1992-02-26  |  7.8 KB  |  298 lines

  1. 'This scroll method has ben named as a SWAP SCROLLY......  By PAUL OVERY 
  2. '
  3. ' Paul Overy (Games Programmer on the look out for a job)
  4. ' "Fryup Productions"
  5. ' 27 Barton Rd 
  6. ' Maidstone  
  7. ' Kent ME15 7BU
  8. '
  9. ' I MUST HAVE some music modules for my future games! Can anyone help.   
  10. '  
  11. Dim C(15)
  12. Global C(),_NEXT_BLOCK_X,_NEXT_BLOCK_Y,_BORDER_X,_BORDER_Y,ST
  13. Set Sprite Buffer 200 : Hide : Unpack 13 To 0
  14. Get Sprite 1,0,0 To 112,128 : Cls 0 : Sprite 8,230,100,1
  15. '
  16. Proc GRAB_BLOCKS
  17. '
  18. Screen Open 0,320+32,256+32,16,Lowres : Flash Off : Curs Off : Cls 0
  19. Double Buffer : Screen Display 0,128,38,320,256
  20. Autoback 0 : Auto View Off : Bob Update Off 
  21. '
  22. OFFSET_X=16 : OFFSET_Y=16
  23. OX=16 : OY=16 : CUT_SIZE=36 : SPEED=2 : ST=Start(14)
  24. '
  25. 'Block update sections needed   16   8   4     2     
  26. 'SPEED can only be set to        1   2   4     8         
  27. 'Best CUT_SIZE                  18  36  72   144       
  28. '
  29. '           more time free    <<<< <<< << <  <   <       
  30. '
  31. '------------------------------------------------------
  32. 'Update the whole screen before starting.
  33. For Y=0 To 272 Step 16
  34.    For X=0 To 336 Step 16
  35.       Put Block Deek(ST+((X/16)*2)+((Y/16)*256)),X,Y
  36.    Next X
  37. Next Y
  38. Screen Swap : Screen Copy Physic To Logic
  39. Screen Offset 0,16,16 : View 
  40. '------------------------------------------------------
  41. 'set sprite & screen colours.
  42. For K=0 To 15
  43.    Colour K,C(K)
  44. Next K
  45. For K=16 To 29 Step 4
  46.    Colour K+1,$85F : Colour K+2,$F66 : Colour K+3,$EEE
  47. Next K
  48. '------------------------------------------------------
  49. Do 
  50.    OFFSET_X=16 : OFFSET_Y=16 : MV_DIR=False
  51.    SCRL_STEP_Y=0 : SCRL_STEP_X=0 : OY=0 : OX=0
  52.    '
  53.    If Jup(1) and MAP_Y>0
  54.       MV_DIR=True : _BORDER_Y=1 : Dec MAP_Y
  55.       OY=16 : Rem screen copy down later     
  56.       SCRL_STEP_Y=-SPEED : Rem step in pixels 
  57.    End If 
  58.    If Jdown(1) and MAP_Y<46
  59.       MV_DIR=True : _BORDER_Y=2 : Inc MAP_Y
  60.       OY=-16 : Rem screen copy up later 
  61.       SCRL_STEP_Y=SPEED : Rem step in pixels 
  62.    End If 
  63.    If Jleft(1) and MAP_X>0
  64.       MV_DIR=True : _BORDER_X=1 : Dec MAP_X
  65.       OX=16 : Rem screen copy right later  
  66.       SCRL_STEP_X=-SPEED : Rem step in pixels 
  67.    End If 
  68.    If Jright(1) and MAP_X<106
  69.       MV_DIR=True : _BORDER_X=2 : Inc MAP_X
  70.       OX=-16 : Rem screen copy left later 
  71.       SCRL_STEP_X=SPEED : Rem step in pixels 
  72.    End If 
  73.    '
  74.    If MV_DIR=True
  75.       Y=0 : Rem start copying at the top of the screen.  
  76.       OK_SWAP=True : Rem do a screen swap 0 later on.       
  77.       '
  78.       While OFFSET_X>0 and OFFSET_X<32 and OFFSET_Y>0 and OFFSET_Y<32
  79.          Add OFFSET_Y,SCRL_STEP_Y
  80.          Add OFFSET_X,SCRL_STEP_X
  81.          Screen Offset 0,OFFSET_X,OFFSET_Y
  82.          View 
  83.          If OK_SWAP=True
  84.             'logical screen now has the next scroll position ready.
  85.             Screen Swap 
  86.             OK_SWAP=False
  87.          End If 
  88.          Wait Vbl 
  89.          'Gradually update the screen in the background.
  90.          Screen Copy Physic(0),0,Y,352,Y+CUT_SIZE To Logic(0),OX,Y+OY
  91.          Add Y,CUT_SIZE : Rem work down the physical screen
  92.          '----------------------------------  
  93.          '2 ON GOTO's saves using 4 IF's, is a CASE NOT A GOTO OK.  
  94.          On _BORDER_Y Goto JY1,JY2
  95.          Goto SKIP1
  96.          JY1: _SCENE_TOP[MAP_X,MAP_Y] : Goto SKIP1
  97.          JY2: _SCENE_BOTTOM[MAP_X,MAP_Y+17] : Goto SKIP1
  98.          '
  99.          SKIP1:
  100.          On _BORDER_X Goto JX1,JX2
  101.          Goto SKIP2
  102.          JX1: _SCENE_LEFT[MAP_X,MAP_Y] : Goto SKIP2
  103.          JX2: _SCENE_RIGHT[MAP_X+21,MAP_Y] : Goto SKIP2
  104.          SKIP2:
  105.          '----------------------------------
  106.       Wend 
  107.    End If 
  108.    If Key State(69) Then Stop 
  109. Loop 
  110. '
  111. Procedure GRAB_BLOCKS
  112.    Unpack 15 To 0
  113.    N=1
  114.    For Y=0 To 240 Step 16
  115.       For X=0 To 304 Step 16
  116.          Get Block N,X,Y,16,16 : Inc N
  117.       Next X
  118.    Next Y
  119.    For C=0 To 15 : C(C)=Colour(C) : Next C
  120. End Proc
  121. '
  122. 'The below procedures only support stepping speeds of 1 & 2. 
  123. 'When using faster speeds, less block sections must be used. 
  124. 'i.e. just delete some lables, and renumber them. Don't forget to change 
  125. 'the CUT_SIZE and the SPEED. 
  126. '
  127. Procedure _SCENE_TOP[X1,Y1]
  128.    P=ST+(X1*2)+(Y1*256)
  129.    Inc _NEXT_BLOCK_Y
  130.    ' Never use a for loop, far 2 slow.
  131.    On _NEXT_BLOCK_Y Goto P1,P2,P3,P4,P5,P6,P7,P8
  132.    P1:
  133.    Put Block Deek(P),0,0
  134.    Put Block Deek(P+2),16,0
  135.    Put Block Deek(P+4),32,0
  136.    Pop Proc
  137.    P2:
  138.    Put Block Deek(P+6),48,0
  139.    Put Block Deek(P+8),64,0
  140.    Put Block Deek(P+10),80,0
  141.    Pop Proc
  142.    P3:
  143.    Put Block Deek(P+12),96,0
  144.    Put Block Deek(P+14),112,0
  145.    Put Block Deek(P+16),128,0
  146.    Pop Proc
  147.    P4:
  148.    Put Block Deek(P+18),144,0
  149.    Put Block Deek(P+20),160,0
  150.    Put Block Deek(P+22),176,0
  151.    Pop Proc
  152.    P5:
  153.    Put Block Deek(P+24),192,0
  154.    Put Block Deek(P+26),208,0
  155.    Put Block Deek(P+28),224,0
  156.    Pop Proc
  157.    P6:
  158.    Put Block Deek(P+30),240,0
  159.    Put Block Deek(P+32),256,0
  160.    Put Block Deek(P+34),272,0
  161.    Pop Proc
  162.    P7:
  163.    Put Block Deek(P+36),288,0
  164.    Put Block Deek(P+38),304,0
  165.    Put Block Deek(P+42),336,0
  166.    Pop Proc
  167.    P8:
  168.    Put Block Deek(P+40),320,0
  169.    _NEXT_BLOCK_Y=0
  170.    _BORDER_Y=0
  171. End Proc
  172. Procedure _SCENE_BOTTOM[X1,Y1]
  173.    P=ST+(X1*2)+(Y1*256)
  174.    Inc _NEXT_BLOCK_Y
  175.    ' Never use for loops in main code, far 2 slow.
  176.    On _NEXT_BLOCK_Y Goto P1,P2,P3,P4,P5,P6,P7,P8
  177.    P1:
  178.    Put Block Deek(P),0,272
  179.    Put Block Deek(P+2),16,272
  180.    Put Block Deek(P+4),32,272
  181.    Pop Proc
  182.    P2:
  183.    Put Block Deek(P+6),48,272
  184.    Put Block Deek(P+8),64,272
  185.    Put Block Deek(P+10),80,272
  186.    Pop Proc
  187.    P3:
  188.    Put Block Deek(P+12),96,272
  189.    Put Block Deek(P+14),112,272
  190.    Put Block Deek(P+16),128,272
  191.    Pop Proc
  192.    P4:
  193.    Put Block Deek(P+18),144,272
  194.    Put Block Deek(P+20),160,272
  195.    Put Block Deek(P+22),176,272
  196.    Pop Proc
  197.    P5:
  198.    Put Block Deek(P+24),192,272
  199.    Put Block Deek(P+26),208,272
  200.    Put Block Deek(P+28),224,272
  201.    Pop Proc
  202.    P6:
  203.    Put Block Deek(P+30),240,272
  204.    Put Block Deek(P+32),256,272
  205.    Put Block Deek(P+34),272,272
  206.    Pop Proc
  207.    P7:
  208.    Put Block Deek(P+36),288,272
  209.    Put Block Deek(P+38),304,272
  210.    Put Block Deek(P+40),320,272
  211.    Pop Proc
  212.    P8:
  213.    Put Block Deek(P+42),336,272
  214.    _NEXT_BLOCK_Y=0
  215.    _BORDER_Y=0
  216. End Proc
  217. Procedure _SCENE_LEFT[X1,Y1]
  218.    P=ST+(X1*2)+(Y1*256)
  219.    Inc _NEXT_BLOCK_X
  220.    ' Never use for loops in main code, far 2 slow.
  221.    On _NEXT_BLOCK_X Goto P1,P2,P3,P4,P5,P6,P7,P8
  222.    P1:
  223.    Put Block Deek(P),0,0
  224.    Put Block Deek(P+256),0,16
  225.    Pop Proc
  226.    P2:
  227.    Put Block Deek(P+512),0,32
  228.    Put Block Deek(P+768),0,48
  229.    Pop Proc
  230.    P3:
  231.    Put Block Deek(P+1024),0,64
  232.    Put Block Deek(P+1280),0,80
  233.    Pop Proc
  234.    P4:
  235.    Put Block Deek(P+1536),0,96
  236.    Put Block Deek(P+1792),0,112
  237.    Pop Proc
  238.    P5:
  239.    Put Block Deek(P+2048),0,128
  240.    Put Block Deek(P+2304),0,144
  241.    Pop Proc
  242.    P6:
  243.    Put Block Deek(P+2560),0,160
  244.    Put Block Deek(P+2816),0,176
  245.    Pop Proc
  246.    P7:
  247.    Put Block Deek(P+3072),0,192
  248.    Put Block Deek(P+3328),0,208
  249.    Put Block Deek(P+3584),0,224
  250.    Pop Proc
  251.    P8:
  252.    Put Block Deek(P+3840),0,240
  253.    Put Block Deek(P+4096),0,256
  254.    Put Block Deek(P+4352),0,272
  255.    _NEXT_BLOCK_X=0
  256.    _BORDER_X=0
  257. End Proc
  258. Procedure _SCENE_RIGHT[X1,Y1]
  259.    P=ST+(X1*2)+(Y1*256)
  260.    Inc _NEXT_BLOCK_X
  261.    ' Never use for loops in main code, far 2 slow.
  262.    On _NEXT_BLOCK_X Goto P1,P2,P3,P4,P5,P6,P7,P8
  263.    P1:
  264.    Put Block Deek(P),336,0
  265.    Put Block Deek(P+256),336,16
  266.    Pop Proc
  267.    P2:
  268.    Put Block Deek(P+512),336,32
  269.    Put Block Deek(P+768),336,48
  270.    Pop Proc
  271.    P3:
  272.    Put Block Deek(P+1024),336,64
  273.    Put Block Deek(P+1280),336,80
  274.    Pop Proc
  275.    P4:
  276.    Put Block Deek(P+1536),336,96
  277.    Put Block Deek(P+1792),336,112
  278.    Pop Proc
  279.    P5:
  280.    Put Block Deek(P+2048),336,128
  281.    Put Block Deek(P+2304),336,144
  282.    Pop Proc
  283.    P6:
  284.    Put Block Deek(P+2560),336,160
  285.    Put Block Deek(P+2816),336,176
  286.    Pop Proc
  287.    P7:
  288.    Put Block Deek(P+3072),336,192
  289.    Put Block Deek(P+3328),336,208
  290.    Put Block Deek(P+3584),336,224
  291.    Pop Proc
  292.    P8:
  293.    Put Block Deek(P+3840),336,240
  294.    Put Block Deek(P+4096),336,256
  295.    Put Block Deek(P+4352),336,272
  296.    _NEXT_BLOCK_X=0
  297.    _BORDER_X=0
  298. End Proc